#ifndef EVENTO_TRATADOR_H
#define EVENTO_TRATADOR_H

namespace teclado { class teclado; }

namespace evento {
/**
  * \brief Um tratador para um evento
  *
  * @author Daniel Fleischman
  * @date 31/01/2008
  */

class tratador {
  public:
  /**
    * Construtor.
    * @param deleta indica ao gerenciador se ele deve destruir
    * esse tratador quando desassocia-lo.
    */
  tratador(bool deleta = false):deleta_(deleta) {}
  virtual ~tratador() {};
  /**
    * Funcao principal do tratador. Eh chamada quando se tem um
    * evento a tratar.
    * @param event o evento que ocorreu.
    * @param passou quanto tempo se passou na ultima iteracao do
    * GT.
    */
  virtual void invoca(const evento& event, int passou) = 0;
  protected:
  bool deleta_;
  friend class gerenciador;
  friend class teclado::teclado;
};

}

#endif
